#include "Spl_list.h" 
//尾插
void insert_node_end(Link_list* list, Elenemt_data data)
{
    Node *new_node = ( Node *)malloc(sizeof(Node));
    if (NULL == new_node)
    {
        printf("创建新节点失败\n");
        return;
    }
    
    new_node->data = data;
    new_node->next = NULL;

    if (list->head == NULL) // 如果链表为空，则新节点即为头节点  
    { 
        list->head = new_node;  
    } 
    else 
    {  
        Node *O = list->head;  
        while (O->next != NULL) 
        {  
            O = O->next;  // 找到最后一个节点 
        }  
        O->next = new_node; // 将新节点连接到最后一个节点之后  
    }  
}  

//头插
void insert_node_begin(Link_list* list, Elenemt_data data)
{
    Node *new_node = ( Node *)malloc(sizeof(Node));
    if (NULL == new_node)
    {
        printf("创建新节点失败\n");
        return;
    }
    new_node->data = data;
    new_node->next = NULL;  
    if (list->head == NULL) // 如果链表为空，则新节点即为头节点  
    { 
        list->head = new_node;
    } 
    else
    {
        new_node->next = list->head;  // 新节点的下一个节点设为头节点
        list->head = new_node;  // 头节点指向新节点
    }
}

//任意插队
void insert_node(Link_list* list, Elenemt_data data, int index)
{
    if (index <= 0)
    {
        printf("不然你来打饭？\n");
        return;
    }

    Node *new_node = (Node *)malloc(sizeof(Node));
    if (NULL == new_node)
    {
        printf("创建新节点失败\n");
        return;
    }

    new_node->data = data;
    new_node->next = NULL;

    Node *p = list->head;
    if (index == 1) // 插入到头部
    {
        new_node->next = list->head;
        list->head = new_node;
        return;
    }

    for (int i = 1; i < index-1 && p!= NULL; i++)
    {
        p = p->next;
    }

    if (p == NULL) // 插入位置超出链表长度
    {
        printf("不如不插队\n");
    }

    new_node->next = p->next;
    p->next = new_node;
}